package com.xframework.gateway.service;

/**
 * Created by xuning on 2020/8/22.
 */

//@Component
//@DependsOn({"gatewayConfig"}) // 依赖于gatewayConfig bean
public class DynamicRouteNacosService {

//    protected Logger logger = LoggerFactory.getLogger(this.getClass());
//
//    @Autowired
//    private DynamicRouteService dynamicRouteService;
//
//    private ConfigService configService;
//
//    @PostConstruct
//    public void init() {
//        logger.info("gateway route init...");
//        try {
//            configService = initConfigService();
//            if (configService == null) {
//                logger.warn("initConfigService fail");
//                return;
//            }
//            String configInfo = configService.getConfig(GatewayConfig.NACOS_ROUTE_DATA_ID, GatewayConfig.NACOS_ROUTE_GROUP, GatewayConfig.DEFAULT_TIMEOUT);
//            logger.info("获取网关当前配置:\r\n{}", configInfo);
//            List<RouteDefinition> definitionList = JSON.parseArray(configInfo, RouteDefinition.class);
//            for (RouteDefinition definition : definitionList) {
//                logger.info("update route : {}", definition.toString());
//                dynamicRouteService.add(definition);
//            }
//        } catch (Exception e) {
//            logger.error("初始化网关路由时发生错误", e);
//        }
//        dynamicRouteByNacosListener(GatewayConfig.NACOS_ROUTE_DATA_ID, GatewayConfig.NACOS_ROUTE_GROUP);
//    }
//
//    /**
//     * 监听Nacos下发的动态路由配置
//     *
//     * @param dataId
//     * @param group
//     */
//    public void dynamicRouteByNacosListener(String dataId, String group) {
//        try {
//            configService.addListener(dataId, group, new Listener() {
//                @Override
//                public void receiveConfigInfo(String configInfo) {
//                    logger.info("进行网关更新:\n\r{}", configInfo);
//                    List<RouteDefinition> definitionList = JSON.parseArray(configInfo, RouteDefinition.class);
//                    for (RouteDefinition definition : definitionList) {
//                        logger.info("update route : {}", definition.toString());
//                        dynamicRouteService.update(definition);
//                    }
//                }
//
//                @Override
//                public Executor getExecutor() {
//                    logger.info("getExecutor\n\r");
//                    return null;
//                }
//            });
//        } catch (NacosException e) {
//            logger.error("从nacos接收动态路由配置出错!!!", e);
//        }
//    }
//
//    /**
//     * 初始化网关路由 nacos config
//     *
//     * @return
//     */
//    private ConfigService initConfigService() {
//        try {
//            Properties properties = new Properties();
//            properties.setProperty("serverAddr", GatewayConfig.NACOS_SERVER_ADDR);
//            properties.setProperty("namespace", GatewayConfig.NACOS_NAMESPACE);
//            return configService = NacosFactory.createConfigService(properties);
//        } catch (Exception e) {
//            logger.error("初始化网关路由时发生错误", e);
//            return null;
//        }
//    }

}
